-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NIFI-14144 Declare status code and content for success in OpenAPI spec #9629
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for working on this substantive adjustment @EndzeitBegins.
It seems like the best way to go, as it aligns the successful response type with the defined schema, as opposed to setting the default
value.
Are you aware of any issues with removing the default
response value as shown after these change?
Thank you for your review @exceptionfactory. I'm not aware of any significant issues arising from these changes. As expected, the modifications primarily impact the generated documentation regarding responses and status codes, when comparing outputs from Notably, a few endpoints previously defined in the original swagger.json (prior to these changes) erroneously returned
Here an example of the generated code snippets. Code generated before PR (excerpt)
/**
* Creates a request to drop the contents of the queue in this connection.
*
* @param id The connection id. (required)
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table border="1">
<caption>Response Details</caption>
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 202 </td><td> The request has been accepted. A HTTP response header will contain the URI where the response can be polled. </td><td> - </td></tr>
<tr><td> 400 </td><td> NiFi was unable to complete the request because it was invalid. The request should not be retried without modification. </td><td> - </td></tr>
<tr><td> 401 </td><td> Client could not be authenticated. </td><td> - </td></tr>
<tr><td> 403 </td><td> Client is not authorized to make this request. </td><td> - </td></tr>
<tr><td> 404 </td><td> The specified resource could not be found. </td><td> - </td></tr>
<tr><td> 409 </td><td> The request was valid but NiFi was not in the appropriate state to process it. </td><td> - </td></tr>
</table>
*/
public void createDropRequest(String id) throws ApiException {
createDropRequestWithHttpInfo(id);
} Code generated after PR (excerpt)
/**
* Creates a request to drop the contents of the queue in this connection.
*
* @param id The connection id. (required)
* @return DropRequestEntity
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table border="1">
<caption>Response Details</caption>
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 202 </td><td> The request has been accepted. A HTTP response header will contain the URI where the response can be polled. </td><td> - </td></tr>
<tr><td> 400 </td><td> NiFi was unable to complete the request because it was invalid. The request should not be retried without modification. </td><td> - </td></tr>
<tr><td> 401 </td><td> Client could not be authenticated. </td><td> - </td></tr>
<tr><td> 403 </td><td> Client is not authorized to make this request. </td><td> - </td></tr>
<tr><td> 404 </td><td> The specified resource could not be found. </td><td> - </td></tr>
<tr><td> 409 </td><td> The request was valid but NiFi was not in the appropriate state to process it. </td><td> - </td></tr>
</table>
*/
public DropRequestEntity createDropRequest(String id) throws ApiException {
ApiResponse<DropRequestEntity> localVarResp = createDropRequestWithHttpInfo(id);
return localVarResp.getData();
} This was the case, because they had both a success response (but without content) and a default response with content defined. Due to the success response being present, the content defined in the default response had no effect on the generated response type. swagger.json before PR (excerpt)
...
"/flowfile-queues/{id}/drop-requests" : {
"post" : {
"operationId" : "createDropRequest",
...
"responses" : {
"202" : {
"description" : "The request has been accepted. A HTTP response header will contain the URI where the response can be polled."
},
"400" : {
"description" : "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."
},
"401" : {
"description" : "Client could not be authenticated."
},
"403" : {
"description" : "Client is not authorized to make this request."
},
"404" : {
"description" : "The specified resource could not be found."
},
"409" : {
"description" : "The request was valid but NiFi was not in the appropriate state to process it."
},
"default" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/DropRequestEntity"
}
}
}
}
},
... swagger.json after PR (excerpt)
...
"/flowfile-queues/{id}/drop-requests" : {
"post" : {
"operationId" : "createDropRequest",
...
"responses" : {
"202" : {
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/DropRequestEntity"
}
}
},
"description" : "The request has been accepted. A HTTP response header will contain the URI where the response can be polled."
},
"400" : {
"description" : "NiFi was unable to complete the request because it was invalid. The request should not be retried without modification."
},
"401" : {
"description" : "Client could not be authenticated."
},
"403" : {
"description" : "Client is not authorized to make this request."
},
"404" : {
"description" : "The specified resource could not be found."
},
"409" : {
"description" : "The request was valid but NiFi was not in the appropriate state to process it."
}
},
...
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the reply and additional explanation @EndzeitBegins. Great to have these corrections and improvements to the OpenAPI specification! +1 merging
Summary
NIFI-14144
swagger.json before change (excerpt)
swagger.json after change (excerpt)
Tracking
Please complete the following tracking steps prior to pull request creation.
Issue Tracking
Pull Request Tracking
NIFI-00000
NIFI-00000
Pull Request Formatting
main
branchVerification
Please indicate the verification steps performed prior to pull request creation.
Build
mvn clean install -P contrib-check
Licensing
LICENSE
andNOTICE
filesDocumentation